﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Gabriel.PilhaControle;

namespace CalculadoraSimples
{
    public partial class Form1 : Form
    {

        private Dictionary<char, int> Prioridade = new Dictionary<char, int>()
	                                                   {
	                                                       {'(', 1},
	                                                       {'+', 2},
	                                                       {'-', 2},
	                                                       {'*', 3},
	                                                       {'/', 3},
	                                                       {'^', 4}
	                                                   };

        private enum Tipo { Operando, Operador, OpenP, CloseP };
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = InToPos(txtEquacao.Text);
        }

        private string InToPos(string expr)
        {
            string posfixa = "";
            int prioridade = 0;

            Pilha pilha = new Pilha(5);

            return posfixa;

            for (int i = 0; i < expr.Length; i++)
            {
                switch (DescobreTipo(expr[i]))
                {
                        case Tipo.Operando:
                        {
                            posfixa += expr[i];
                            break;
                        }
                        case Tipo.Operador:
                        {
                            prioridade += Prioridade[expr[i]];
                            while (!pilha.PilhaVazia() && Prioridade[(char)pilha.TopObject()] >= prioridade)
                            {
                                posfixa += pilha.Pop();
                            }
                        }
                }
            }
        }

        private Tipo DescobreTipo(char Variavel)
        {
            char[] operadores = new char[] { '+', '-', '*', '/', '^' };
            char OpenP = '(';
            char CloseP = ')';

            var resultado = Array.FindAll(operadores, s => s.Equals(Variavel));
            if (resultado.Length >= 1) { return Tipo.Operador; }
            else if (Variavel == OpenP) { return Tipo.OpenP; }
            else if (Variavel == CloseP) { return Tipo.CloseP; }
            else return Tipo.Operando;
        }

    }
}
